<?php

namespace app\checkin\controller;

use app\checkin\model\Gift as GiftModel;
use think\admin\helper\QueryHelper;

/**
 * 礼品管理
 * @class Gift
 * @package app\checkin\controller
 */
class Gift extends Base
{
    /**
     * 礼品列表
     * @auth true
     * @menu true
     */
    public function index()
    {
        $this->title = '礼品列表';
        GiftModel::mQuery()->layTable(function () {
            $this->assign('statusMap', GiftModel::$statusMap);
        }, function (QueryHelper $query) {
            $query->like('name,type')->equal('status')->dateBetween('create_time');
        });
    }

    /**
     * 添加礼品（仅总账号）
     * @auth true
     */
    public function add()
    {
        if (!$this->isMaster) $this->error('仅总账号可操作！');
        $this->title = '添加礼品';
        $this->_applyFormToken();
        GiftModel::mForm('form');
    }

    /**
     * 编辑礼品（仅总账号）
     * @auth true
     */
    public function edit()
    {
        if (!$this->isMaster) $this->error('仅总账号可操作！');
        $this->title = '编辑礼品';
        $this->_applyFormToken();
        GiftModel::mForm('form');
    }

    /**
     * 表单过滤
     * @param array $data
     */
    protected function _form_filter(array &$data)
    {
        if ($this->request->isGet()) {
            $this->assign('statusMap', GiftModel::$statusMap);
        } else {
            // 基础校验
            $data['points_required'] = intval($data['points_required'] ?? 0);
            if ($data['points_required'] < 1) $this->error('所需积分必须为正整数！');
            if (isset($data['stock']) && $data['stock'] !== '') {
                $data['stock'] = intval($data['stock']);
                if ($data['stock'] < -1) $this->error('库存不能小于 -1（-1 表示不限）！');
            } else {
                $data['stock'] = -1; // 默认不限
            }
            $data['sort'] = intval($data['sort'] ?? 0);
            $data['status'] = isset($data['status']) ? intval($data['status']) : 1;
        }
    }

    /**
     * 表单结果
     * @param bool $result
     */
    protected function _form_result(bool $result)
    {
        if ($result) $this->success('礼品保存成功！');
    }

    /**
     * 状态变更（仅总账号）
     * @auth true
     */
    public function state()
    {
        if (!$this->isMaster) $this->error('仅总账号可操作！');
        GiftModel::mSave($this->_vali([
            'status.in:0,1'  => '状态值范围异常！',
            'status.require' => '状态值不能为空！',
        ]));
    }

    /**
     * 删除礼品（仅总账号）
     * @auth true
     */
    public function remove()
    {
        if (!$this->isMaster) $this->error('仅总账号可操作！');
        GiftModel::mDelete();
    }
}
